package com.example.demo.component.zibbix;

import com.alibaba.fastjson.JSONObject;

import java.math.RoundingMode;
import java.text.DecimalFormat;

/**
 * @ClassName zabbix_client_util
 * @Description
 * @date 2022/11/16 11:29
 * @Author yanceysong
 * @Version 1.0
 */
public class zibbix_client_util {
    /**
     * 从得到的结果json中获取百分数
     *
     * @param jsonObject 结果的json
     * @return 百分数
     */
    public static String get_percent(JSONObject jsonObject) {
        String value = (String) jsonObject.get("value");
        return double2percent(Double.parseDouble(value));
    }

    /**
     * 从得到的结果JSON获取值
     *
     * @param jsonObject 结果的json
     * @return 值
     */
    public static String get_value(JSONObject jsonObject) {
        String value = (String) jsonObject.get("value");
        return byte_format(Long.parseLong(value));
    }

    /**
     * 字节数自动转对应的单位
     *
     * @param size 字节数
     * @return 转好的最大单位
     */
    private static String byte_format(long size) {
        StringBuilder bytes = new StringBuilder();
        DecimalFormat format = new DecimalFormat("###.0");
        if (size >= 1024 * 1024 * 1024) {
            double i = (size / (1024.0 * 1024.0 * 1024.0));
            bytes.append(format.format(i)).append("GB");
        } else if (size >= 1024 * 1024) {
            double i = (size / (1024.0 * 1024.0));
            bytes.append(format.format(i)).append("MB");
        } else if (size >= 1024) {
            double i = (size / (1024.0));
            bytes.append(format.format(i)).append("KB");
        } else if (size < 1024) {
            if (size <= 0) {
                bytes.append("0B");
            } else {
                bytes.append((int) size).append("B");
            }
        }
        return bytes.toString();
    }

    /**
     * 小数自动保留两位
     *
     * @param num double小数
     * @return 保留两位的小数
     */
    private static String double2percent(double num) {
        DecimalFormat df = new DecimalFormat("0.00");
        df.setRoundingMode(RoundingMode.HALF_UP);
        // Double.parseDouble将String类型的数据转换为Double类型
        num = Double.parseDouble(df.format(num));
        return String.valueOf(num)+"%";
    }
}
